import pandas as pd
import plotly.express as px
from merge_io_table import InputOutputTable

import plotly.io as pio
pio.renderers.default = "notebook" 

data2020 = pd.read_excel(r'data/中国投入产出表/2017.xlsx', sheet_name=None, index_col=0)
io20 = InputOutputTable(2020, '中国', data2020, '40行业')





io20.q1





px.bar(io20.q1['专用设备'])





px.bar(io20.q1['教育'])











io20.q2






px.bar(io20.q2.居民消费支出)


px.bar(io20.q2.政府消费支出)


px.bar(io20.q2[['居民消费支出','政府消费支出']], barmode='group')


px.bar(io20.q2[['消费支出合计','资本形成总额']], barmode='group')


px.bar(io20.q2[['出口','进口']], barmode='group')





io20.q3


px.bar(io20.q3.loc[['增加值合计'],:].T, barmode='group')


px.bar(io20.q3.loc[['劳动者报酬', '生产税净额', '营业盈余', '固定资产折旧'],:].T, barmode='group')


# 劳动者报酬占比
px.bar(io20.q3.loc['劳动者报酬',:]/io20.q3.loc['增加值合计',:].T, barmode='group')


# 营业盈余占比
px.bar(io20.q3.loc['营业盈余',:]/io20.q3.loc['增加值合计',:].T, barmode='group')


# 固定资产折旧占比
px.bar(io20.q3.loc['固定资产折旧',:]/io20.q3.loc['增加值合计',:].T, barmode='group')





## 直接消耗系数
io20.A





px.bar(io20.A[['房地产','金融']], barmode='group')





io20.L


px.bar(io20.L[['通用设备','专用设备']], barmode='group')





io20.B


# 完全消耗系数
px.bar(io20.B[['通用设备','专用设备']], barmode='group')








io20.F


px.bar(io20.F)





io20.E


px.bar(io20.E)









value_add_items = ['劳动者报酬', '生产税净额', '固定资产折旧', '营业盈余', '增加值合计', '总投入']


se = io20.IIC_all_sector('增加值合计').round(2).sort_values(ascending=False)
se


io20.income_coef('劳动者报酬')


io20.L


io20.q2['总产出']





apl = io20.calculate_apl()
apl.round(6)


# 从拉动角度看APL 列展开
px.bar(apl[['房地产','金融']], barmode='group')


# 从推动角度看APL > 行展开
px.bar(apl.loc[['通用设备','文化体育娱乐'],:].T, barmode='group')








cal = io20.income_coef('增加值合计').dot(io20.L).dot(io20.q2.最终使用合计 - io20.q2.进口)
true_value = io20.q3.loc['增加值合计',:]
df = pd.DataFrame({'增加值真实-第三象限':true_value, '增加值，由最终使用拉动计算':cal})
df.round(1)
# 验证 列昂惕夫逆矩阵计算过程没问题，这个计算拉动没问题





io20.q2.columns





def ld(name):
    dic_ld = {}
    for c in ['农村居民消费支出', '城镇居民消费支出', '居民消费支出', '政府消费支出', '消费支出合计',
        '固定资本形成总额', '存货变动', '资本形成总额', '出口', '最终使用合计']:
        vector = io20.q2[c]
        vector_ = vector / vector.sum()
        ld = io20.income_coef(name).dot(io20.L).dot(vector_)
        dic_ld[c] = ld
    df_ld = pd.DataFrame(dic_ld)
    df_ld.sum().round(4)
    return df_ld
df_ld = ld('劳动者报酬')
df_ld.round(4)


px.bar(df_ld.sum().round(4))






df_tax = ld('生产税净额')
df_tax.sum().round(4)


px.bar(df_tax.sum().round(4))





df_profits = ld('营业盈余')
df_profits.round(6)



px.bar(df_profits.sum().round(4))


df_zj = ld('固定资产折旧')
df = pd.DataFrame(
    {'生产税净额':df_tax.sum(), 
    '营业盈余':df_profits.sum(), 
    '劳动者报酬': df_ld.sum(),
    '固定资产折旧':df_zj.sum()})
df.round(4)



px.bar(df)



px.bar(df.loc[['居民消费支出', '政府消费支出', '固定资本形成总额', '出口']].T, barmode='group')
# 不同政策向量下，收入法GDP的影响



